package com.tools;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AESEncryptTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		
		String content = "^YHN&UJM";
		System.out.println(content);
		byte[] cb = content.getBytes();
		
		String s = ByteTool.toHexString(cb);
		System.out.println("未加密："+s);
		System.out.println(new String(ByteTool.HexStringToByte(s.replaceAll("\\s", ""))));
		
		
		cb = AESEncrypt(content, "pass");
		
		
		System.out.println("已加密："+ByteTool.toHexString(cb));
		cb = AESDecrypt(cb, "pass");
		System.out.println("解密："+ByteTool.toHexString(cb));
		System.out.println(new String(cb));
		
		
	}
	
	
	
	public static byte[] AESEncrypt(String content, String password) {

		try {

		KeyGenerator kgen = KeyGenerator.getInstance("AES");

		kgen.init(128, new SecureRandom(password.getBytes()));

		SecretKey secretKey = kgen.generateKey();

		byte[] enCodeFormat = secretKey.getEncoded();

		SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

		Cipher cipher = Cipher.getInstance("AES");// 创建密码器

		byte[] byteContent = content.getBytes("utf-8");

		cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

		byte[] result = cipher.doFinal(byteContent);

		return result; // 加密

		} catch (NoSuchAlgorithmException e) {

		e.printStackTrace();

		} catch (NoSuchPaddingException e) {

		e.printStackTrace();

		} catch (InvalidKeyException e) {

		e.printStackTrace();

		} catch (UnsupportedEncodingException e) {

		e.printStackTrace();

		} catch (IllegalBlockSizeException e) {

		e.printStackTrace();

		} catch (BadPaddingException e) {

		e.printStackTrace();

		}

		return null;

		}


		/**解密

		* @param content  待解密内容

		* @param password 解密密钥

		* @return

		*/

		public static byte[] AESDecrypt(byte[] content, String password) {

		try {

		KeyGenerator kgen = KeyGenerator.getInstance("AES");

		kgen.init(128, new SecureRandom(password.getBytes()));

		SecretKey secretKey = kgen.generateKey();

		byte[] enCodeFormat = secretKey.getEncoded();

		SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

		Cipher cipher = Cipher.getInstance("AES");// 创建密码器

		cipher.init(Cipher.DECRYPT_MODE, key);// 初始化

		byte[] result = cipher.doFinal(content);

		return result; // 加密

		} catch (NoSuchAlgorithmException e) {

		e.printStackTrace();

		} catch (NoSuchPaddingException e) {

		e.printStackTrace();

		} catch (InvalidKeyException e) {

		e.printStackTrace();

		} catch (IllegalBlockSizeException e) {

		e.printStackTrace();

		} catch (BadPaddingException e) {

		e.printStackTrace();

		}

		return null;

		}

}
